home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 9 / FM Towns Free Software Collection 9.iso / t_os / tool / ugoku / src / mvplyg / movplayg.c < prev    next >
Text File  |  1994-11-16  |  8KB  |  335 lines

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <winb.h>
  5. #include <te.h>
  6. #include <fntb.h>
  7. #include <gui.h>
  8. #include <file_dlg.h>
  9. #include <egb.h>
  10. #include <mos.h>
  11. #include <snd.h>
  12. #include <guidbg.h>
  13. #include "ugoku.h"
  14. #include "mvtype.h"
  15.  
  16. extern    int        movobj ;
  17.  
  18. char    *guiEgbPtr ;            /*    EGB のワークアドレス    */
  19.  
  20. #define    MinMem (1024*128)    /*    必要とする動作メモリの定義    */
  21.  
  22. /*    アラートメッセージ                        */
  23. static char    *alertStrMem[] = 
  24.                 {"動くざんす:\nメモリが不足しています", "確認"};
  25.  
  26. /*    checkMemFunc関数/alertMemFunc関数の追い越し禁止フラグ    */
  27. static int        checkMemFlag = 0x00 ;
  28.  
  29. /****************************************************************/
  30. /*    メモリ不足時のアラート関数(イベント登録関数)                */
  31. /****************************************************************/
  32. void alertMemFunc()
  33. {
  34.     /*    メモリ不足のアラート表示    */
  35.     MMI_CallMessage(MMI_GetApliId(), GM_ALERT, 
  36.                         AM_ALERT1 | AM_ALERTB0E,(int)alertStrMem) ;
  37.  
  38.     /* checkMemFunc関数/alertMemFunc関数の追い越し禁止解除    */
  39.     checkMemFlag &= 0xef ;
  40. }
  41.  
  42. /****************************************************************/
  43. /*    メモリ開放関数                                                */
  44. /****************************************************************/
  45. int checkMemFunc(useMem)
  46. int    useMem ;
  47. {
  48.     int        ret ;
  49.  
  50.     /*    メモリチェック                    */
  51.     if(TL_checkMemory(1) * 4096 >= useMem)
  52.         return NOERR ;        /*    メモリがあれば正常復帰        */
  53.  
  54.     do
  55.     {
  56.         /*    メモリ開放処理                */
  57.         ret = MMI_CallMessage(MMI_GetApliId(), GM_PURGE, 0, 0) ;
  58.  
  59.         /*    メモリチェック                */
  60.         if(TL_checkMemory(1) * 4096 >= useMem)
  61.             break ;
  62.     } while(ret == NOERR) ;
  63.  
  64.     return    ret ;
  65. }
  66.  
  67. /****************************************************************/
  68. /*    Townsシェル呼び出し関数                                        */
  69. /****************************************************************/
  70. int userFunc(aplId, messId, info, data)
  71. int        aplId ;
  72. int        messId ;
  73. int        info ;
  74. int        data ;
  75. {
  76.     register int    ret ;
  77.     int                sw ;
  78.     POOLDATA        *ptr ;
  79.  
  80.     ret = ILLEGAL_FUNCTION ;
  81.  
  82.     switch (messId)
  83.     {
  84.         case    GM_WAKE :
  85.         {
  86.             EVENT    ev ;
  87.  
  88.             /*    checkMemFunc関数の追い越し禁止判定            */
  89.             if(checkMemFlag & 0x01)
  90.                 break ;
  91.  
  92.             /*    動作メモリのチェック                        */
  93.             /*    checkMemFunc関数の追い越し禁止        */
  94.             checkMemFlag |= 0x01 ;
  95.             if(checkMemFunc(MinMem) != NOERR)
  96.             {
  97.                 /*    alertMemFunc関数の追い越し禁止    */
  98.                 checkMemFlag |= 0x10 ;
  99.                 /*    メモリ不足の場合はアラート処理関数をイベント登録する    */
  100.                 MMI_FlushEvnt() ;
  101.                 ev.what = EVEXEC ;
  102.                 ev.shift = 0 ;
  103.                 ev.info = (int)alertMemFunc ;
  104.                 MMI_SetEvnt(&ev) ;
  105.                 break ;
  106.             }
  107.  
  108.             extern int wakeSet() ;
  109.  
  110.             wakeSet() ;
  111.             break ;
  112.         }
  113.  
  114.         case    GM_SLEEP :
  115.         {
  116.             /* alertMemFunc関数がイベント登録されてなければ、checkMemFunc関数
  117.                 の追い越し禁止解除                                            */
  118.             if((checkMemFlag & 0x10) == 0x00)
  119.                 checkMemFlag &= 0xfe ;
  120.  
  121.             extern int sleepSet() ;
  122.  
  123.             sleepSet() ;
  124.             break ;
  125.         }
  126.  
  127.         case    GM_QUIT :
  128.         {
  129.             extern int quitFunc2() ;
  130.  
  131.             ret = quitFunc2() ;
  132.             break ;
  133.         }
  134.  
  135.     }
  136.     return ret ;
  137.  
  138. }
  139.  
  140. void main( ac, av )
  141. char ac,*av[];
  142. {
  143.     extern int APL_init() ;
  144.     extern int p_for_bach( char, char ** ) ;
  145.  
  146.     MMICTRL ctrl ;
  147.     int kobj ;
  148.  
  149.     /*    初期化処理    */
  150.     ctrl.page0 = SCREEN16 | SCREENIGNORE ;
  151.     ctrl.page1 = SCREEN32K ;
  152.     ctrl.writePage = 0 ;
  153.     ctrl.displayPage = 3 ;
  154.     ctrl.priority = 0 ;
  155.  
  156.     ctrl.mode = SCREENAVAILABLE ;
  157.     ctrl.width = SCREENEXPAND ;
  158.     ctrl.size = 0 ;
  159.     ctrl.ptr = NULL ;
  160.     ctrl.asize = 0 ;
  161.     ctrl.aptr = NULL ;
  162.  
  163.     ctrl.fr.lupx = 0 ;
  164.     ctrl.fr.lupy = 0 ;
  165.     ctrl.fr.rdwx = 0 ;
  166.     ctrl.fr.rdwy = 0 ;
  167.  
  168.     ctrl.move.lupx = -32767 ;
  169.     ctrl.move.lupy = -32767 ; /* ダイアログの移動範囲に制限を付ける(y座標)    */
  170.     ctrl.move.rdwx = 32767 ;
  171.     ctrl.move.rdwy = 32767 ;
  172.     ctrl.white = 15 ;
  173.     ctrl.black = 8 ;        /*    パレット変更に伴いGUIの表示色を変更(黒)        */
  174.     ctrl.gray = 7 ;            /*                 〃                    (灰色)    */
  175.     ctrl.xor = 7 ;            /*                 〃                    (反転色)    */
  176.  
  177.     /*    二重起動のチェック        */
  178.     kobj = MMI_CallMessage(MMI_GetApliId(),    GM_QUERYID, QM_KIND, 1) ;
  179.  
  180. //    if( (kobj > NOERR) && (ac > 1) )    /* もう1つの自分を消す */
  181. //    {
  182. //        MMI_CallMessage( kobj, GM_QUIT, 0, 0 ); 
  183. //        goto start ;
  184. //    }
  185. //    if( (kobj > NOERR) && (ac <= 1) )    /* 自分自身を消す */
  186. //    {
  187. //        MMI_CallMessage(MMI_GetApliId(), GM_SWITCH, FALSE, kobj) ;
  188. //        goto end ;
  189. //    }
  190.     if( kobj > NOERR )    /* 自分自身を消す */
  191.     {
  192.         MMI_CallMessage(MMI_GetApliId(), GM_SWITCH, FALSE, kobj) ;
  193.         goto end ;
  194.     }
  195.  
  196. start:
  197.     /*    初期化処理                */
  198.     if (MMI_Open( &ctrl ) == NOERR)
  199.     {
  200.         /*    初期化に成功すればメインループに入る.    */
  201.         if (APL_init() == NOERR)
  202.         {
  203.             /*    動作メモリのチェック    */
  204.             /*    checkMemFunc関数の追い越し禁止    */
  205.             checkMemFlag |= 0x01 ;
  206.             if(checkMemFunc(MinMem) != NOERR)
  207.             {
  208.                 /*    alertMemFunc関数の追い越し禁止    */
  209.                 checkMemFlag |= 0x10 ;
  210.                 alertMemFunc();            /*    メモリ不足のアラート表示    */
  211.             }
  212.             /*    checkMemFunc関数の追い越し禁止解除    */
  213.             checkMemFlag &= 0xfe ;
  214.  
  215.             FDG_SaveCurDir() ;        /*    カレントディレクトリ保存    */
  216.             FDG_InitFileDlg() ;        /*    ファイルダイアログ初期化    */
  217.  
  218.             if( ac >= 2 )            /*  バッチ処理                    */
  219.                 p_for_bach( ac, av ) ;
  220.  
  221.             MMI_ExecSystem() ;        /*    メインのイベントループ        */
  222.  
  223.             FDG_FreeFileDlg() ;        /*    ファイルダイアログ終了処理    */
  224.             FDG_RecovCurDir() ;        /*    カレントディレクトリ復元    */
  225.  
  226.             MMI_SendMessage( movobj, MM_DESTROY, 0 ) ;
  227.  
  228.             MMI_SendMessage(MMI_GetSleepObj(), MM_SLEEP, 0) ;
  229.             MMI_SetWakeObj(UNUSED);
  230.         }
  231.         /*    終了処理                */
  232.         MMI_Close() ;
  233.     }
  234.  
  235. end:
  236.     return ;
  237. }
  238.  
  239. int APL_init()
  240. {
  241.     extern int        mouseDsp( int ) ;        /*    マウス表示関数        */
  242.     extern MMIINIT    initDataIMWDSK ;
  243.     extern MMIINIT    initDataIMWERR ;
  244.     extern MMIINIT    initDataIMWSET ;
  245.     extern int        mItemId[3] ;
  246.  
  247.     register int    ret ;
  248.  
  249.     /*    EGB ワークアドレスの取得.    */
  250.     guiEgbPtr = MMI_GetEgbPtr() ;
  251.  
  252.     /*    ハイパ型部品の初期化            */
  253.     if ((ret = MMI_initHyper()) < 0)
  254.         return ret ;
  255.     /*    リストメニュー型部品の初期化    */
  256.     if ((ret = MMI_initListMenuL40()) < 0)
  257.         return ret ;
  258.     /*    ダイアログ型部品の初期化        */
  259.     if ((ret = MMI_initDialogL40()) < 0)
  260.         return ret ;
  261.     /*    アラート型部品の初期化            */
  262.     if ((ret = MMI_initAlertL40()) < 0)
  263.         return ret ;
  264.     /*    ウインドウ型部品の初期化        */
  265.     if ((ret = MMI_initWindowL40()) < 0)
  266.         return ret ;
  267.     /*    メッセージ型部品の初期化        */
  268.     if ((ret = MMI_initMessageL40()) < 0)
  269.         return ret ;
  270.     /*    メニュー型部品の初期化            */
  271.     if ((ret = MMI_initMenuL40()) < 0)
  272.         return ret ;
  273.     /*    ボタン型部品の初期化            */
  274.     if ((ret = MMI_initButtonL40()) < 0)
  275.         return ret ;
  276.     /*    ドロウボタン型部品の初期化        */
  277.     if ((ret = MMI_initDrawButtonL40()) < 0)
  278.         return ret ;
  279.     /*    アイコンボタン型部品の初期化    */
  280.     if ((ret = MMI_initIconL40()) < 0)
  281.         return ret ;
  282.     /*    トグルアイコン型部品の初期化    */
  283.     if ((ret = MMI_initToggleIconL40()) < 0)
  284.         return ret ;
  285.     /*    メニューアイテム型部品の初期化    */
  286.     if ((ret = MMI_initMenuItemL40()) < 0)
  287.         return ret ;
  288.     /*    スクロール型部品の初期化        */
  289.     if ((ret = MMI_initScrollBarL40()) < 0)
  290.         return ret ;
  291.     /*    テキスト型部品の初期化            */
  292.     if ((ret = MMI_initTextL40()) < 0)
  293.         return ret ;
  294.     /*    数値入力型部品の初期化            */
  295.     if ((ret = MMI_initNumBoxL40()) < 0)
  296.         return ret ;
  297.  
  298.     /*    動くざんす型部品の初期化(!)    */
  299.     if ((ret = MMI_initUZansu()) < 0)
  300.         return ret ;
  301.  
  302.     /*    パレット変更・・・・2画面使用の影響を受けるため */
  303. //    ret = setPalette( guiEgbPtr ) ;
  304.  
  305.     /*    マウスカーソル表示関数の変更・・・・2画面使用の影響を受けるため */
  306.     MMI_SetPtrFunc( mouseDsp ) ;
  307.  
  308.     /*    背景データの初期化                        */
  309.  
  310.     /*    データの登録        */
  311.     if ((ret = MMI_Init(&initDataIMWDSK)) < 0)
  312.         return ret ;
  313.  
  314.     if ((ret = MMI_Init(&initDataIMWERR)) < 0)
  315.         return ret ;
  316.  
  317.     if ((ret = MMI_Init(&initDataIMWSET)) < 0)
  318.         return ret ;
  319.  
  320.     /*    動くざんすオブジェクトの登録(!)*/
  321.     movobj = MMI_SendMessage( MJ_UZANSU, MM_NEW, 0 ) ;
  322.  
  323.     /*    呼び出し関数を登録する    */
  324.     MMI_SendMessage(MMI_GetBaseObj(), MM_SETEXEC, 1, userFunc) ;
  325.  
  326.     /*    アプリケーション名を登録する    */
  327.     MMI_CallMessage(MMI_GetApliId(), GM_TITLE, (int)"動くざんす", 0) ;
  328.  
  329.     /*    背景を表示する                            */
  330.     MMI_SendMessage(MMI_GetBaseObj(), MM_SHOW, 0) ;
  331.  
  332.     return NOERR ;
  333. }
  334.  
  335.